home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / p063b9s.zip / UNIT / FAX.PAS < prev    next >
Pascal/Delphi Source File  |  1996-06-26  |  7KB  |  220 lines

  1. UNIT Fax;
  2. {╔══════════════════════════════════════════════════════════════════════════╗}
  3. {║ Fax receive routine                           Last changed: 26.06.96  SA ║}
  4. {║                                                                          ║}
  5. {║                      Original code by: Bo Bendtsen                       ║}
  6. {║                         (C) Copyright 1989-96 by                         ║}
  7. {║       Dan Wulff, Jens Sandalgaard, Steen Christensen & S¢ren Ager        ║}
  8. {║                                                                          ║}
  9. {║ This source may not be given to anybody, without the written permission  ║}
  10. {║ from The Portal Team.                                                    ║}
  11. {╚══════════════════════════════════════════════════════════════════════════╝}
  12. {$I POPDEFS.INC}
  13.  
  14. INTERFACE
  15.  
  16. USES Use32;
  17.  
  18. PROCEDURE GetFax;
  19.  
  20. IMPLEMENTATION
  21.  
  22. Uses
  23.   Dos,OpCrt, OpRoot, OpFrame, OpWindow, OpString, ApTimer,
  24.   FaxConv,
  25.   PoPTypes, Globals, LogFile, Util, StrUtil, FileUtil, OproUtil, Com, Modem;
  26.  
  27. TYPE
  28.   PFaxWindow = ^TFaxWindow;
  29.   TFaxWindow = OBJECT(StackWindow)
  30.     CONSTRUCTOR Init;
  31.  
  32.     PROCEDURE ShowRemoteID(CONST s: S80);
  33.     PROCEDURE ShowParameters(CONST s: S80);
  34.     PROCEDURE ShowPage(Page: Word);
  35.     PROCEDURE ShowCurrentByte(CurByte: LongInt);
  36.     PROCEDURE ShowMessage(CONST s: S80);
  37.   END;
  38.  
  39.   CONSTRUCTOR TFaxWindow.Init;
  40.   BEGIN
  41.     INHERITED InitCustom(15,10,65,16,Cfg.Color[2],wBordered+wClear);
  42.     SetCursor(cuHidden);
  43.     WFrame.AddHeader(' Fax receive progress ',heTC);
  44.     IF Cfg.Screen.ExplodingWin THEN EnableExplosions(10);
  45.     wFrame.AddShadow(shBR, shSeeThru);
  46.     Draw;
  47.     wFastText('Remote ID  :',2,2);
  48.     wFastText('Parameters :',3,2);
  49.     wFastText('Page       :',4,2);
  50.     wFastText('Transfrd   :',5,2);
  51.     wFastText('Last msg.  :',6,2);
  52.     ShowPage(0);
  53.   END;
  54.  
  55.   PROCEDURE TFaxWindow.ShowRemoteID(CONST s: S80);
  56.   BEGIN
  57.     wFastText(CPad(Trim(s), 35), 2, 15);
  58.     AddLog('*', 'Remote ID: '+Trim(s));
  59.   END;
  60.  
  61.   PROCEDURE TFaxWindow.ShowParameters(CONST s: S80);
  62.   BEGIN
  63.     wFastText(CPad(Trim(s), 35), 3, 15);
  64.     AddLog('*', 'Parameters: '+Trim(s));
  65.   END;
  66.  
  67.   PROCEDURE TFaxWindow.ShowPage(Page: Word);
  68.   BEGIN
  69.     wFastText(LongIntForm('#####', Page), 4, 15);
  70.     ShowCurrentByte(0);
  71.   END;
  72.  
  73.   PROCEDURE TFaxWindow.ShowCurrentByte(CurByte: LongInt);
  74.   BEGIN
  75.     wFastText(LongIntForm('#.###.###', CurByte), 5, 15);
  76.   END;
  77.  
  78.   PROCEDURE TFaxWindow.ShowMessage(CONST s: S80);
  79.   BEGIN
  80.     wFastText(CPad(Trim(s), 35), 6, 15);
  81.   END;
  82.  
  83.   PROCEDURE GetFax;
  84.   Var
  85.     Ch          : Char;
  86.     LastIn      : String;
  87.     Page        : Word;
  88.     InCode      : Boolean;
  89.     x1,x2,x3,
  90.     x4,x5       : Word;
  91.     FaxInDir,
  92.     Filename    : PathStr;
  93.     Info        : SearchRec;
  94.     OutFile     : BufIdStreamPtr;
  95.     FaxWin      : PFaxWindow;
  96.     t           : EventTimer;
  97.     CurByte     : LongInt;
  98.   BEGIN
  99.     IF ComPort^.GetBaudRate<19200 THEN ComPort^.SetBaudRate(19200);
  100.     GetDate(x2, x3, x1, x4); GetTime(x2, x3, x4, x5);
  101.     FaxInDir:=ForceExtension(Copy(Cfg.Inbound[nsUnknown], 1, Length(Cfg.Inbound[nsUnknown])-1), 'FAX')+'\';
  102.     MakeFullDir(FaxInDir);
  103.     FileName:=FaxInDir+ToChar(x1)+ToChar(x2)+ToChar(x3);
  104.     LastIn:='';
  105.     Page:=0;
  106.     New(FaxWin, Init);
  107.     NewTimerSecs(T, 30);
  108.     REPEAT
  109.       IF ComPort^.KeyPressed THEN
  110.       BEGIN
  111.         LastIn:=Trim(ModemReadStr);
  112.  
  113. { IF LastIn<>'' THEN addlog('!', '>>'+LastIn+'<<'); }
  114.  
  115.         IF Pos('+FTSI: ',LastIn)<>0 THEN
  116.         BEGIN
  117.           Delete(LastIn, 1, 6);
  118.           FaxWin^.ShowRemoteID(Trim(LastIn));
  119.           NewTimerSecs(T, 10);
  120.         END;
  121.  
  122.         IF Pos('+FET: ',LastIn)<>0 THEN
  123.         BEGIN
  124.           IF Pos('2', LastIn)>0 THEN
  125.           BEGIN
  126.             FaxWin^.ShowMessage('End of fax');
  127.             NewTimer(t, 0);
  128.           END;
  129.           IF Pos('0', LastIn)>0 THEN
  130.           BEGIN
  131.             FaxWin^.ShowMessage('New page, same doc.');
  132.             NewTimerSecs(T, 10);
  133.           END;
  134.         END;
  135.  
  136.         IF Pos('+FDCS: ',LastIn)<>0 THEN
  137.         BEGIN
  138.           Delete(LastIn, 1, 7);
  139.           FaxWin^.ShowParameters(LastIn);
  140.           NewTimerSecs(T, 10);
  141.         END;
  142.  
  143.         IF Pos('OK',LastIn)<>0 THEN
  144.         BEGIN
  145.           LastIn:='';
  146.           Pause(30);
  147.           FaxWin^.ShowMessage('Sending page go code');
  148.           NewTimerSecs(T, 10);
  149.           ComPort^.WriteStr('AT+FDR'#13);
  150.           REPEAT
  151.             IF ComPort^.KeyPressed THEN
  152.             BEGIN
  153.               LastIn:=ModemReadStr;
  154.               IF Pos('CONNECT',LastIn)<>0 THEN
  155.               BEGIN
  156.                 LastIn:='';
  157.                 Inc(Page);
  158.                 FaxWin^.ShowPage(Page);
  159.                 FaxWin^.ShowMessage(FileName+ToChar(Page)+'.FAX');
  160.                 New(OutFile, Init(FileName+ToChar(Page)+'.FAX', SCreate, Max64k(MaxAvail-2048)));
  161.                 Delay(200);
  162.                 ComPort^.WriteByte(18, True);
  163.                 NewTimerSecs(T, 10);
  164.                 InCode:=False;
  165.                 CurByte:=0;
  166.                 REPEAT
  167.                   IF ComPort^.KeyPressed THEN
  168.                   BEGIN
  169.                     Inc(CurByte);
  170.                     IF (CurByte MOD 128)=0 THEN FaxWin^.ShowCurrentByte(CurByte);
  171.                     Ch:=Char(ComPort^.ReadByte);
  172.                     LastIn:=LastIn+Ch;
  173.                     IF Length(LastIn)>10 THEN Delete(LastIn, 1, 1);
  174.                     NewTimerSecs(T, 5);
  175.                     IF InCode THEN
  176.                     BEGIN
  177.                       IF Ch=#$10 THEN
  178.                         OutFile^.Write(Ch, 1)   { $10$10 = $10 }
  179.                       ELSE
  180.                         IF Ch=#$1A THEN             { $10$1A = $10$10 }
  181.                         BEGIN
  182.                           Ch:=#$10;
  183.                           OutFile^.Write(Ch, 1);
  184.                           OutFile^.Write(Ch, 1);
  185.                         END;
  186.                       InCode:=False;
  187.                     END ELSE
  188.                     BEGIN
  189.                       IF Ch=#$10 THEN InCode:=True ELSE OutFile^.Write(Ch, 1);
  190.                     END;
  191.                   END;
  192.                 UNTIL (TimerExpired(t)) or (Pos('+FPTS',LastIn)<>0);
  193.                 IF TimerExpired(t) THEN
  194.                   FaxWin^.ShowMessage('Timeout')
  195.                 ELSE
  196.                   FaxWin^.ShowMessage('End of page');
  197.                 Dispose(OutFile, Done);
  198.               END;
  199.             END;
  200.           UNTIL (TimerExpired(t)) or (Pos('+FPTS',LastIn)<>0);
  201.         END;
  202.         LastIn:='';
  203.       END;
  204.     UNTIL (TimerExpired(t));
  205.     Dispose(FaxWin, Done);
  206.     AddLog('*', Long2Str(Page)+' fax pages received');
  207.  
  208.     FindFirst(Filename+'??.FAX', Archive, Info);
  209.     IF DosError=0 THEN MakeModemBusy;
  210.     WHILE DosError=0 DO
  211.     BEGIN
  212.       FaxToPcx(FaxInDir+Info.Name);
  213.       DeleteFile(FaxInDir+Info.name);
  214.       FindNext(Info);
  215.     END;
  216.     FindClose(Info);
  217.   END;
  218.  
  219. END.
  220.